"""
面向对象，数据分析案例，主业务逻辑代码
实现步骤：
1.设计一个类，可以完成数据的时装
2.设计一个抽象类，定义文件读取的相关功能，并使用子类实现具体功能
3.读取文件，生产数据对象
4.进行数据需求的逻辑计算（计算每一天的销售额）
5.通过PyEcharts进行图形绘制
"""

from file_define import FileReader, TextFileReader, JsonFileReader
from record import Record
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
from pyecharts.options import TitleOpts, LabelOpts, InitOpts

# --------------------------数据处理-----------------------------
text_file_reader = TextFileReader("2011年1月销售数据.txt")
json_file_reader = JsonFileReader("2011年2月销售数据JSON.txt")

jan_data: list[Record] = text_file_reader.read_data()  # 1月份的数据
feb_data: list[Record] = json_file_reader.read_data()  # 2月份的数据

# 将2个月份的数据合并1个list来存储
all_data: list[Record] = jan_data + feb_data

# 开始进行数据计算  ——  计算各个日期的销售额
# 将数据做成字典：{“2011-01-01":1534,"2011-01-02":300,"2011-01-03":650}
data_dict = {}
for record in all_data:
    if record.date in data_dict:
        # 当前日期已经有记录了，所以和老记录做累加即可
        data_dict[record.date] += record.money
    else:
        # 当前日期已经无记录，将第一个销售金额记入即可
        data_dict[record.date] = record.money

# print(data_dict)  # 测试

# --------------------------可视化开发-----------------------------
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))

bar.add_xaxis(list(data_dict.keys()))  # 添加X轴的数据
bar.add_yaxis(
    "销售额", list(data_dict.values()), label_opts=LabelOpts(is_show=False)
)  # 添加y轴的数据
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额"),
)

bar.render("每日销售额柱状图.htmL")
